package com.qys.livesMall.anchor.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.qys.livesMall.anchor.event.pojo.UserGradeIntegralPOJO;
import com.qys.livesMall.anchor.mapper.UserGradeIntegralMapper;
import com.qys.livesMall.anchor.model.dto.lives.app.AppUserGradeIntegralDTO;
import com.qys.livesMall.anchor.model.dto.lives.sys.QueryUserGradeIntegralDTO;
import com.qys.livesMall.anchor.model.entity.UserGradeIntegral;
import com.qys.livesMall.anchor.model.entity.UserGradeIntegralRule;
import com.qys.livesMall.anchor.model.vo.lives.app.UserGradeIntegralVO;
import com.qys.livesMall.anchor.model.vo.lives.sys.UserGradeIntegralPageVO;
import com.qys.livesMall.anchor.service.UserGradeIntegralRuleService;
import com.qys.livesMall.anchor.service.UserGradeIntegralService;
import com.qys.livesMall.app.user.mapper.H2AppUserMapper;
import com.qys.livesMall.cache.RedisCache;
import com.qys.livesMall.common.utils.DateUtils;
import jakarta.annotation.Resource;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author 
 * @since 2023-09-12
 */
@Service
public class UserGradeIntegralServiceImpl extends ServiceImpl<UserGradeIntegralMapper, UserGradeIntegral> implements UserGradeIntegralService {

    @Resource
    private UserGradeIntegralRuleService userGradeIntegralRuleService;

    @Autowired
    private RedisCache redisCache;
    @Resource
    private H2AppUserMapper appUserMapper;

    @Override
    public void addUserGradeIntegral(UserGradeIntegralPOJO pojo) {
        LambdaQueryWrapper<UserGradeIntegral> queryWrapper=new LambdaQueryWrapper<>();
        queryWrapper.eq(UserGradeIntegral::getUserId,pojo.getUserId());
        UserGradeIntegral userGradeIntegral = baseMapper.selectOne(queryWrapper);
        if (null==userGradeIntegral){
            userGradeIntegral=new UserGradeIntegral();
            userGradeIntegral.setUserId(pojo.getUserId());
            userGradeIntegral.setGradeIntegral(pojo.getGradeIntegral().intValue());
            userGradeIntegral.setCreateTime(DateUtils.dateTimeNow());
        }else {
            userGradeIntegral.setGradeIntegral(pojo.getGradeIntegral().intValue()+userGradeIntegral.getGradeIntegral());
            userGradeIntegral.setUpdateTime(DateUtils.dateTimeNow());
        }
        List<UserGradeIntegralRule> list = redisCache.getCacheObject("user:grade:integral:rule");
        if (null==list){
            list=userGradeIntegralRuleService.list();
            redisCache.setCacheObject("user:grade:integral:rule",list);
        }
        for (UserGradeIntegralRule rule:list){
            if (null !=rule.getIntegralStart() && rule.getIntegralStart().intValue() > pojo.getGradeIntegral().intValue()){
                continue;
            }
            if (null !=rule.getIntegralEnd() && rule.getIntegralEnd().intValue() < pojo.getGradeIntegral().intValue()){
                continue;
            }
            userGradeIntegral.setGradeName(rule.getName());
        }
        if (null == userGradeIntegral.getId()){
            save(userGradeIntegral);
        }else {
            updateById(userGradeIntegral);
        }
    }

    @Override
    public Page<UserGradeIntegralVO> usergradesort(AppUserGradeIntegralDTO dto) {
        Page<UserGradeIntegralVO> page = new Page<>(dto.getPageNum(), dto.getPageSize());
        Page<UserGradeIntegralVO> list=baseMapper.usergradesort(page, dto);
        if (CollectionUtils.isNotEmpty(dto.getProhibitionUserids())){
            list.getRecords().forEach(e->{
               if (dto.getProhibitionUserids().contains(e.getUserId())){
                   e.setQuiltConcernAnchor(1);
               }
            });
        }
        return list;
    }

    @Override
    public IPage<UserGradeIntegralPageVO> getUserGradeIntegralPage(QueryUserGradeIntegralDTO dto) {
        Page<UserGradeIntegralPageVO> page = new Page<>(dto.getPageNum(), dto.getPageSize());
        List<UserGradeIntegralPageVO> list = baseMapper.selectUserGradeIntegralPage(page, dto);
        return page.setRecords(list);
    }
}
